﻿/*!
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using System;
using System.Threading;
using System.Threading.Tasks;

namespace Pittypat.Web
{
    /// <summary>
    /// 普通的异步操作进度，无法像 WebSocket 一样汇报进度，主要用于 AJAX 请求。
    /// </summary>
    sealed class WebAsyncProgress : IAsyncProgress
    {
        /// <summary>
        /// 初始化 <see cref="WebAsyncProgress"/> 的新实例。
        /// </summary>
        /// <param name="token">取消异步操作的标记。</param>
        internal WebAsyncProgress(CancellationToken token)
        {
            this.Token = token;
        }

        /// <summary>
        /// 获取用于取消异步操作的标记。
        /// </summary>
        public CancellationToken Token
        {
            get;
            private set;
        }

        /// <summary>
        /// 汇报异步操作的进度。
        /// </summary>
        /// <param name="percent">当前进度的百分比。</param>
        /// <param name="message">当前进度下的消息。</param>
        /// <param name="value">同时发送给远程终端的值。</param>
        /// <returns>异步任务。</returns>
        Task IAsyncProgress.ReportAsync(float percent, string message, IJson value)
        {
            return Task.FromResult(percent);
        }

        /// <summary>
        /// 释放当前对象占用的资源。什么都不做。
        /// </summary>
        void IDisposable.Dispose()
        {
        }
    }
}
